package gerador;

import java.util.ArrayList;
import java.util.List;

import scr.BuscaTabelas;
import scr.Coluna;
import scr.Lista;
import scr.Tabela;

public class IniciarPainel {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		List<Tabela> tabelas = BuscaTabelas.iniciar();
		List<Lista> listas = new ArrayList<Lista>();

		for (Tabela tabela : tabelas) {
			String metodo = "";
			String declaracao = "";
			if (tabela.getNomeBanco().contains("_m_")) {
				criaLista(listas, tabela);
				continue;

			}
		}
		
		for (Lista l : listas) {
			Tabela tClasse = null;
			Tabela tModel = null;
			for (Tabela t : tabelas) {
				if(t.getNomeBanco().equalsIgnoreCase(l.getModel())){
					tModel = t;
				}
				if(t.getNomeBanco().equalsIgnoreCase(l.getClasse())){
					tClasse = t;
				}
				if(tClasse!=null && tModel!=null){
					for (Coluna c : tModel.getColunas()) {
						tClasse.addColuna(c);
					}
					
				}
			}
		}
		
		

		for (Tabela tabela : tabelas) {

			int altura = 70;
			List<String> tela = new ArrayList<String>();
			List<String> componenetes = new ArrayList<String>();
			if (tabela.getNomeBanco().contains("_m_")) {
				continue;
			}

			 criarPainel(tabela, altura, tela, componenetes);
		}
	}

	
	private static void criarPainel(Tabela tabela, int altura,
			List<String> tela, List<String> componenetes) {
		tela.add("package revert.panel;");
		tela.add("import revert.model." + tabela.getNome() + ";");
		tela.add("import javax.swing.ComboBoxModel;");
		tela.add("import javax.swing.DefaultComboBoxModel;");
		tela.add("import javax.swing.JButton;");
		tela.add("import javax.swing.JCheckBox;");
		tela.add("import javax.swing.JComboBox;");
		tela.add("import javax.swing.JLabel;");
		tela.add("import javax.swing.JSeparator;");
		tela.add("import javax.swing.JTextField;");
		tela.add("import javax.swing.SwingConstants;");
		tela.add("import javax.swing.WindowConstants;");
		tela.add("import java.awt.event.ActionEvent;");
		tela.add("import java.awt.event.ActionListener;");
		tela.add("");
		tela
				.add("public class  "
						+ tabela.getNome()
						+ "Panel extends javax.swing.JPanel implements ActionListener {");
		tela.add("private JLabel jLabelTela;");
		tela.add("private JButton jButtonSalvar;");
		tela.add("private JButton jButton1;");
		tela.add("private JSeparator jSeparator1;");

		for (Coluna coluna : tabela.getColunas()) {
			if (coluna.getTipoDado().contains("boolean")) {
				tela.add("private JCheckBox jCheckBox" + coluna.getNomeSet()
						+ ";");
				tela.add("private JLabel jLabel" + coluna.getNomeSet() + ";");

				componenetes.add("jCheckBox" + coluna.getNomeSet()
						+ ".isSelected()");
			} else if (coluna.getTipoDado().contains("int")) {
				if (!coluna.isChave()) {
					tela.add("private JComboBox jComboBox"
							+ coluna.getNomeSet() + ";");
					tela.add("private JLabel jLabel" + coluna.getNomeSet()
							+ ";");
					componenetes.add("jComboBox" + coluna.getNomeSet()
							+ ".getSelectedItem().toString()");
				} else {
					altura = altura - 30;
					componenetes.add("null");
				}
			} else if (coluna.getTipoDado().contains("char")
					|| coluna.getTipoDado().contains("num")
					|| coluna.getTipoDado().contains("time")
					|| coluna.getTipoDado().contains("text")
					|| coluna.getTipoDado().contains("date")
					|| coluna.getTipoDado().contains("double")
					|| coluna.getTipoDado().contains("ARRAY")) {
				tela.add("private JTextField jTextField" + coluna.getNomeSet()
						+ ";");
				tela.add("private JLabel jLabel" + coluna.getNomeSet() + ";");
				componenetes.add("jTextField" + coluna.getNomeSet()
						+ ".getText()");
			}
		}
		// boolean che
		// int id e pri

		tela.add("");
		tela.add("	public " + tabela.getNome() + "Panel() {");
		tela.add("		super();");
		tela.add("		initGUI();");
		tela.add("	}");
		tela.add("	");
		tela.add("	private void initGUI() {");
		tela.add("	try {");
		tela.add("			this.setPreferredSize(new java.awt.Dimension(790, 615));");
		tela.add("			this.setLayout(null);");
		tela.add("			{");
		tela.add("				jLabelTela = new JLabel();");
		tela.add("				this.add(jLabelTela);");
		tela.add("				jLabelTela.setText(\"" + tabela.getNome() + "\");");
		tela.add("				jLabelTela.setBounds(39, 28, 695, 14);");
		tela.add("			}");
		for (Coluna coluna : tabela.getColunas()) {
			if (coluna.getTipoDado().contains("boolean")) {
				tela.add("			{");
				tela.add("				jLabel" + coluna.getNomeSet()
						+ " = new JLabel();");
				tela.add("				this.add(jLabel" + coluna.getNomeSet() + ");");
				tela.add("				jLabel" + coluna.getNomeSet() + ".setText(\""
						+ coluna.getNomeLabel() + "\");");
				tela.add("				jLabel" + coluna.getNomeSet() + ".setBounds(39, "
						+ altura + ", 95, 14);");
				tela.add("			}");
				tela.add(" 			{");
				tela.add(" 				jCheckBox" + coluna.getNomeSet()
						+ " = new JCheckBox();");
				tela
						.add(" 				this.add(jCheckBox" + coluna.getNomeSet()
								+ ");");
				tela.add(" 				jCheckBox" + coluna.getNomeSet()
						+ ".setText(\"Ativo\");");
				tela.add("				jCheckBox" + coluna.getNomeSet()
						+ ".setBounds(139, " + altura + ", 108, 18);");
				tela.add(" 			}");
			} else if (coluna.getTipoDado().contains("int")
					&& !coluna.isChave()) {
				tela.add("			{");
				tela.add("				jLabel" + coluna.getNomeSet()
						+ " = new JLabel();");
				tela.add("				this.add(jLabel" + coluna.getNomeSet() + ");");
				tela.add("				jLabel" + coluna.getNomeSet() + ".setText(\""
						+ coluna.getNomeLabel() + "\");");
				tela.add("				jLabel" + coluna.getNomeSet() + ".setBounds(39, "
						+ altura + ", 95, 14);");
				tela.add("			}");
				tela.add(" 			{");
				tela.add(" 				ComboBoxModel jComboBoxModel"
						+ coluna.getNomeSet() + " = ");
				tela.add(" 				new DefaultComboBoxModel(");
				tela.add(" 				new String[] { \"Item One\", \"Item Two\" });");
				tela.add(" 				jComboBox" + coluna.getNomeSet()
						+ " = new JComboBox();");
				tela
						.add(" 				this.add(jComboBox" + coluna.getNomeSet()
								+ ");");
				tela.add("				jComboBox" + coluna.getNomeSet()
						+ ".setModel(jComboBoxModel" + coluna.getNomeSet()
						+ ");");
				tela.add(" 				jComboBox" + coluna.getNomeSet()
						+ ".setBounds(139, " + altura + ", 393, 25);");
				tela.add("			 }");
			}

			else if (coluna.getTipoDado().contains("char")
					|| coluna.getTipoDado().contains("num")
					|| coluna.getTipoDado().contains("text")
					|| coluna.getTipoDado().contains("date")
					|| coluna.getTipoDado().contains("double")
					|| coluna.getTipoDado().contains("ARRAY")) {
				tela.add("			{");
				tela.add("				jLabel" + coluna.getNomeSet()
						+ " = new JLabel();");
				tela.add("				this.add(jLabel" + coluna.getNomeSet() + ");");
				tela.add("				jLabel" + coluna.getNomeSet() + ".setText(\""
						+ coluna.getNomeLabel() + "\");");
				tela.add("				jLabel" + coluna.getNomeSet() + ".setBounds(39, "
						+ altura + ", 95, 14);");
				tela.add("			}");
				tela.add("			{");
				tela.add("				jTextField" + coluna.getNomeSet()
						+ " = new JTextField();");
				tela
						.add("				this.add(jTextField" + coluna.getNomeSet()
								+ ");");
				tela.add("				jTextField" + coluna.getNomeSet()
						+ ".setBounds(139, " + altura + ", 393, 26);");
				tela.add("			}");
				tela.add("");
			}
			altura = altura + 30;

		}
		tela.add("			{");
		tela.add("				jSeparator1 = new JSeparator();");
		tela.add("				this.add(jSeparator1);");
		tela.add("				jSeparator1.setBounds(574, 67, 10, 447);");
		tela.add("				jSeparator1.setOrientation(SwingConstants.VERTICAL);");
		tela.add("			}");
		tela.add("			{");
		tela.add("				jButtonSalvar = new JButton();");
		tela.add("				this.add(jButtonSalvar);");
		tela.add("				jButtonSalvar.setText(\"Salvar\");");
		tela.add("				jButtonSalvar.setBounds(641, 67, 93, 46);");
		tela.add("				jButtonSalvar.addActionListener(this);");
		tela.add("			}");
		tela.add("			{");
		tela.add("				jButton1 = new JButton();");
		tela.add("				this.add(jButton1);");
		tela.add("				jButton1.setText(\"Cancelar\");");
		tela.add("				jButton1.setBounds(641, 130, 93, 46);");
		tela.add("				jButton1.addActionListener(this);");
		tela.add("			}");
		tela.add("	} catch (Exception e) {");
		tela.add("			e.printStackTrace();");
		tela.add("		}");
		tela.add("	}");
		tela.add("public void actionPerformed(ActionEvent event) {");
		tela.add("	System.out.println(\"oi\");");
		tela.add("if(event.getSource()==jButtonSalvar){");
		tela.add(tabela.getNome() + " " + tabela.getNomeBanco() + " = new "
				+ tabela.getNome() + "();");
		for (int i = 0; i < tabela.getColunas().size(); i++) {

			try {
				System.out.println(tabela.getNome());
				System.out.println(tabela.getColunas().get(i).getNomeSet());
				System.out.println(tabela.getColunas().get(i).getTipoDado());

				if (tabela.getColunas().get(i).getTipoDado().contains("num")
						|| tabela.getColunas().get(i).getTipoDado().contains(
								"double")) {
					tela.add(tabela.getNomeBanco() + ".set"
							+ tabela.getColunas().get(i).getNomeSet()
							+ "(Double.parseDouble(" + componenetes.get(i)
							+ "));");
				} else {
					tela.add(tabela.getNomeBanco() + ".set"
							+ tabela.getColunas().get(i).getNomeSet() + "("
							+ componenetes.get(i) + ");");
				}
				tela.add("	");
			} catch (Exception e) {

				e.printStackTrace();
			}

		}
		tela.add("}");
		tela.add("}");
		tela.add("");
		tela.add("}");
		tela.add("");
		tela.add("");
		GeradorArquivos.criarTela(tabela.getNome() + "Panel.java", tela);
	}
	
	
	public static void criaLista(List<Lista> listas, Tabela tabela) {
		Lista l = criaLista(tabela);
		listas.add(l);
	}

	private static Lista criaLista(Tabela tabela) {
		String metodo;
		String declaracao;
		metodo = "";
		declaracao = "";
		String s[] = tabela.getNomeBanco().split("_m_");
		System.out.println("entidade: " + s[0]);
		System.out.println(s[1].substring(0, 1).toUpperCase());
		s[1] = s[1].replaceFirst(s[1].substring(0, 1), s[1].substring(0, 1)
				.toUpperCase());
		System.out.println("lista: " + s[1]);

		declaracao = "private List<" + s[1] + "> lista" + s[1] + ";\n";
		metodo = metodo + "\n public void set" + s[1] + "(List<" + s[1]
				+ "> lista" + s[1] + "){\n	" + " this.lista" + s[1] + "= lista"
				+ s[1] + ";\n }";

		metodo = metodo + "\n public List<" + s[1] + "> get" + s[1] + "(){\n	"
				+ " return " + "lista" + s[1] + ";\n }\n";
		System.out.println(metodo);
		Lista l = new Lista(s[0], metodo, declaracao);
		l.setGet("get" + s[1] + "()");
		l.setSet("set" + s[1] + "(");
		l.setModel(s[1]);
		l.setTabelaF(tabela);
		l.setTabela(tabela.getNomeBanco());
		return l;
	}

}
